package degreeAndSyllabus;

import java.util.LinkedList;
import java.util.List;

import subjectAndProfessorship.EnrolledInProfessorship;
import subjectAndProfessorship.Professorship;
import util.MyDate;

/**
 * @author Nati
 * @author Damian
 * Status: Finish
 */
public abstract class SubjectType { // tipo materia
	public abstract void enrollStudent (Professorship catedra, SubjectInPlan sip, Degree carrera, EnrolledInDegree alumno);
	
	public void agregarAlumnoConCondicion (EnrolledInDegree alumnoEnCarrera, SubjectInPlan sip, Professorship catedra){
		if (sip.getSyllabus().tieneCorrelativas()){
			if (alumnoEnCarrera.materiasAprobadas ().containsAll (sip.getMateriasCorrelativas())){
				this.agregarAlumno(catedra, alumnoEnCarrera);
			}else{
				System.err.println("NO APROBE LAS MATERIAS CORRELATIVAS");
			}
		}else {
			this.agregarAlumno(catedra, alumnoEnCarrera);
		}
	}

	private void agregarAlumno(Professorship catedra, EnrolledInDegree alumnoEnCarrera) {
		List <MyDate> asistencias = new LinkedList<MyDate>(); 
		EnrolledInProfessorship nuevoInscripto =new EnrolledInProfessorship(asistencias, alumnoEnCarrera, catedra); //Creo un nuevo inscripto
		alumnoEnCarrera.getEstudiante().getInscripcionesACatedras().add(nuevoInscripto); //Le agrego el inscriptoACatedra al alumno.
		alumnoEnCarrera.agregarCatedra(catedra);  //Agrego en la inscripcion del alumno en la carrera, la nueva catedra que cursa.
		catedra.agregarAlumno(nuevoInscripto); //Agrego al inscriptoACatedra a catedra.
	}
}
